/**
  ************************************* Copyright ******************************
  * FileName   : at24cxx.h
  * Version    : v1.0
  * Author     : yychao
  * Date       : 2024-03-05
  * Description:
  * Function List:
  	1. ....
  	   <version>:
  <modify staff>:
  		  <data>:
   <description>:
  	2. ...
  ******************************************************************************
 */

#ifndef __AT24CXX_H_
#define __AT24CXX_H_
#include "main.h"


/*
 * AT24C02 2kb = 2048bit = 2048/8 B = 256 B
 * 32 pages of 8 bytes each
 *
 * Device Address
 * 1 0 1 0 A2 A1 A0 R/W
 * 1 0 1 0 0  0  0  0 = 0xA0
 * 1 0 1 0 0  0  0  1 = 0xA1
 */

/* AT24C01/02每页有8个字节
 * AT24C04/08A/16A每页有16个字节
 */
#define READ_CMD				1
#define WRITE_CMD				0

#define AT24C128



#ifdef AT24C01
#define EE_MODEL_NAME		"AT24C01"
#define EE_DEV_ADDR			0xA0		/* 设备地址 */
#define EE_PAGE_SIZE		8			/* 页面大小(字节) */
#define EE_SIZE				128			/* 总容量(字节) */
#define EE_ADDR_BYTES		1			/* 地址字节个数 */
#define EE_ADDR_A8			0			/* 地址字节的高8bit不在首字节 */
#endif



#ifdef AT24C02
#define EE_MODEL_NAME		"AT24C02"
#define EE_DEV_ADDR			0xA0		/* 设备地址 */
#define EE_PAGE_SIZE		8			/* 页面大小(字节) */
#define EE_SIZE				256			/* 总容量(字节) */
#define EE_ADDR_BYTES		1			/* 地址字节个数 */
#define EE_ADDR_A8			0			/* 地址字节的高8bit不在首字节 */
#endif



#ifdef AT24C04
#define EE_MODEL_NAME		"AT24C04"
#define EE_DEV_ADDR			0xA0		/* 设备地址 */
#define EE_PAGE_SIZE		8			/* 页面大小(字节) */
#define EE_SIZE				512			/* 总容量(字节) */
#define EE_ADDR_BYTES		1			/* 地址字节个数 */
#define EE_ADDR_A8			1			/* 地址字节的高8bit在首字节 */
#endif



#ifdef AT24C08
#define EE_MODEL_NAME		"AT24C08"
#define EE_DEV_ADDR			0xA0		/* 设备地址 */
#define EE_PAGE_SIZE		16			/* 页面大小(字节) */
#define EE_SIZE				(16*64)		/* 总容量(字节) */
#define EE_ADDR_BYTES		2			/* 地址字节个数 */
#define EE_ADDR_A8			1			/* 地址字节的高8bit在首字节 */
#endif




#ifdef AT24C16
#define EE_MODEL_NAME		"AT24C16"
#define EE_DEV_ADDR			0xA0		/* 设备地址 */
#define EE_PAGE_SIZE		16			/* 页面大小(字节) */
#define EE_SIZE				(128*16)	/* 总容量(字节) */
#define EE_ADDR_BYTES		2			/* 地址字节个数 */
#define EE_ADDR_A8			1			/* 地址字节的高8bit在首字节 */
#endif



#ifdef AT24C32
#define EE_MODEL_NAME		"AT24C32"
#define EE_DEV_ADDR			0xA0		/* 设备地址 */
#define EE_PAGE_SIZE		32			/* 页面大小(字节) */
#define EE_SIZE				(128*32)	/* 总容量(字节) */
#define EE_ADDR_BYTES		2			/* 地址字节个数 */
#define EE_ADDR_A8			1			/* 地址字节的高8bit在首字节 */
#endif


#ifdef AT24C64
#define EE_MODEL_NAME		"AT24C64"
#define EE_DEV_ADDR			0xA0		/* 设备地址 */
#define EE_PAGE_SIZE		32			/* 页面大小(字节) */
#define EE_SIZE				(256*32)	/* 总容量(字节) */
#define EE_ADDR_BYTES		2			/* 地址字节个数 */
#define EE_ADDR_A8			1			/* 地址字节的高8bit在首字节 */
#endif



#ifdef AT24C128
#define EE_MODEL_NAME		"AT24C128"
#define EE_DEV_ADDR			0xA0		/* 设备地址 */
#define EE_PAGE_SIZE		64			/* 页面大小(字节) */
#define EE_SIZE				(256*64)	/* 总容量(字节) */
#define EE_ADDR_BYTES		2			/* 地址字节个数 */
#define EE_ADDR_A8			0			/* 地址字节的高8bit不在首字节 */
#endif



#ifdef AT24C256
#define EE_MODEL_NAME		"AT24C256"
#define EE_DEV_ADDR			0xA0		/* 设备地址 */
#define EE_PAGE_SIZE		64			/* 页面大小(字节) */
#define EE_SIZE				(512*64)	/* 总容量(字节) */
#define EE_ADDR_BYTES		2			/* 地址字节个数 */
#define EE_ADDR_A8			0			/* 地址字节的高8bit不在首字节 */
#endif



#ifdef AT24C512
#define EE_MODEL_NAME		"AT24C512"
#define EE_DEV_ADDR			0xA0		/* 设备地址 */
#define EE_PAGE_SIZE		128			/* 页面大小(字节) */
#define EE_SIZE				(512*128)	/* 总容量(字节) */
#define EE_ADDR_BYTES		2			/* 地址字节个数 */
#define EE_ADDR_A8			0			/* 地址字节的高8bit不在首字节 */
#endif


uint8_t At24cxxReadOneByte(uint16_t ReadAddr);
void At24cxxWriteOneByte(uint16_t WriteAddr,uint8_t DataToWrite);

void x24Cxx_ReadPage(uint16_t u16Addr, uint8_t u8Len, uint8_t *pBuff);
void x24Cxx_WritePage(uint16_t u16Addr, uint8_t u8Len, uint8_t *pData);
#endif


